perm filename NAME.TEX[LET,RWF] blob
sn#870468 filedate 1989-02-27 generic text, type C, neo UTF8
COMMENT ā VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 \input rwflet
C00017 ENDMK
Cā;
\input rwflet
\memoto Various
\from Robert W. Floyd
\subject Curriculum Proposals; Good Name
\body
Having acquired a reputation as a terrible teacher, I find it hard at
times to get a hearing for proposals to make my courses more central in
degree programs. For this reason, I address the validity of the reputation
before addressing the proposals.
In 1986, two of my courses (262 and 154) went catastrophically. I believe
that the reasons lay primarily in my long bout with bronchitis, and in the
grossly inadequate TA support. Nevertheless, one of my courses (now CS254)
has been moved out of most degree tracks, and another (CS106H, an honors-level
introduction to algorithms and programming) languishes for lack of connection
to any following sequence. I find, also, that many students have been
warned against my courses. I can conceive that these warnings are given in
good faith, but I ask the warners to look at the evidence below. From
Fall 1985, all of my courses have been evaluated. I have tabulated, below, my
numerical scores (a key follows) with my CS percentile rank or the CS average
for the question and quarter. Other than in the two catastrophes, my
evaluations on the four questions most relevant to my reputation are above the
department median or average in 14 out of 24 cases.
In the overall ratings of my performance on these six courses, only two
students out of 38 rated me less than 3 (= good).
I address this memo to you because I would like to be more useful. CS254
and 106H are original courses, potentially valuable resources for Stanford,
that are getting fewer than ten students per year. Each should be
accommodating thirty or more of our best students. I would like advisors
to direct undergraduates with sufficient math skills to 254 rather than 154.
I would like 106H to be the first half or first third of a fast and
intellectually challenging entryway to computing, for potential majors and
for science and engineering students with strong computational interests.
I would like to reduce the load on those who teach 154 and 106A, and try to
persuade them that much of my material can and should be taught to average
undergraduates.
I would like capable graduate students to be interested in TAing my courses,
and I would like those who assign TA's to attach some positive value to
supporting my courses.
Now please (unless you already consider me a good teacher) take a look at the
table and consider, if it makes you more comfortable, the possibility that Bob
Floyd finally got his act together.
\vfill\eject
In regard to CS254: I am working on a manuscript that subsumes about the first
ten chapters of the standard Hopcroft-Ullman text. My approach uses
a uniform device-based definition of all common (and some uncommon)
mathematical machines, with a general definition and theory of execution,
simulation, standardization, and composition. In 1985-6, when I adopted this
approach with a limited set of supporting notes, the students were confused.
In 1988-9, with more complete notes, and a TA who had himself
taken the course, I cut loose entirely
from Hopcroft and Ullman. The students who were
familiar with standard texts were enthusiastic. One student hated the
course, but everyone else seemed to find it intellectually exciting.
I think the 1988-9 evaluation
fairly represents the quality of the material, and will improve somewhat
as the notes are filled out with examples and explanations.
The current version of CS154 was set up to save undergraduates
from my notorious course (now CS254). Average evaluations over the
two most recent sections of each are:
$$\vbox{\settabs\+ 254\quad & Instructor\quad & Course\quad &
Knowledge\quad & Fairness\cr
\+ & Instructor\quad & Course\quad & Knowledge\quad & Fairness\cr
\+ 254 &\quad 2.22 &\quad 2.28 &\quad 1.28 &\quad 2.36\cr
\+ 154 &\quad 2.68 &\quad 2.97 &\quad 1.50 &\quad 2.38\cr}$$
\noindent My course contains nothing
intellectually harder than the Hopcroft-Ullman proofs; many of my proofs are
shorter and simpler than those in any text known to me. Shouldn't those
undergraduates who can handle proof be directed to 254?
Wouldn't my treatment of Earley's parsing algorithm (I was Earley's advisor)
be useful preparation for study of modern compiler front ends?
Wouldn't a general
treatment of simulation and standardization be useful preparation for
study of modern
code generation and optimization methods?
\vfill\eject
In regard to CS106H:
This course has never had any internal problems. Most of the students taking
it are self-selected, and like what they get; the evaluations on most aspects
are well above the CS average. A few students take it only because of
scheduling problems, but the last several of them have seemed to like the course
and profit from it. Yet the enrollments stay low, under ten a year. The
year before CS106X was established, I had thirty students or so, just from
advertising in the regular CS106 sections. This suggests a potential clientele
of at least 10\% of the CS106 population, say 80 or 100 per year. Now 106X
takes the hotshots; and many others who inquire are discouraged because
there is no place to go afterward than 106B, repeating material on data
structures, recursion, pointers, and abstract data types that they have
mastered in 106H. As a result, 106H is a terminal course. We talk, as a
department, of wanting professors to teach undergraduate courses. Here is a
professor who wants to, and seems to do it well. Supporting his efforts by
integrating CS106H into our curriculum might encourage other professors to
do likewise.
It makes sense to adopt a viewpoint in the technical entry-level courses that
emphasizes design of algorithms, as opposed to software engineering. The
great majority of the CS106 students are scientists and (traditional) engineers;
they number in the hundreds, to the CS majors in the dozens. This majority
are unlikely to become software engineers in any serious way, to produce
programs of the complexity requiring the sophisticated methods modern
software engineering provides for complexity management. I think the majority
need to know how to understand and construct good algorithms. They need to know
how to design an algorithm to solve a problem, based on a mathematical
characterization of the solution. They also need to understand the mathematical
behavior of approximate calculation well enough to determine whether the results
of a calculaton can be trusted. For those who can handle the mathematics
and the level of abstraction, CS106H is more suitable than a software
engineering oriented course. CS 106H does not ignore SE considerations; I
introduced material on drivers, stub procedures, abstract data types, etc., into
CS106 some fifteen years ago, before such material was even fashionable.
We have emphasized development of coding skills and knowledge of Pascal (or its
successors) in our first courses so that students would be ``prepared'' to
learn ``real'' computer science in perhaps their third course. This
short-changes the student who does not want to be a CS specialist. We should
address the general technically oriented student, whether he will take one
of our courses or five, from the beginning with material worthy of serious
intellectual interest. Isn't that the face we want to present to the world?
We can tie computation to its historic roots in mathematics, as I do in
explaining numerical precision and number representation, with a case study
of Machin's 1706 applicaton of the embryonic calculus to compute pi to 100
decimal places. We can show how elementary computational geometry solves
problems of computer graphics, like testing whether this point is inside
that polygon, or whether two line segments intersect. We can show how to
derive a computation recursively and implement it iteratively; Gaussian
elimination is an elegant example. Methods like problem size reduction, dynamic
programming, branch-and-bound, recursion, alpha-beta pruning, backtracking
can be applied to serious problems like text editing, combinatorial search,
adaptive numerical integration with bounded error; or reliably finding all
roots of a polynomial.
Departments like mathematics and physics have honors-level introductory
sequences for the ablest students, of whatever major; these courses move
fast and dig deep.
As serious teachers, we should be catering to students who have the capacity
and energy for such a treatment of our subject. CS 106H is designed to be the
first course in such a sequence, it is well received, and it has been
debugged. It embodies my best ideas on design and understanding of
algorithms. I consider most of it intellectually stimulating. Why not make
it the foundation of our high-level sequence?
\endletter
\end